直接进入正题,如果要在mac下反编绎apk跟在window下还是有点区别的,但是大体原理是一样的。首先下载三个工具:
Apktool
dex2jar
jd-gui
分别介绍下这几个应用在mac下的安装
Apktool,官方有明确的文档说明:
Download Mac wrapper script (Right click, Save Link As apktool)
Download apktool-2
Rename downloaded jar to apktool.jar
Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)
Make sure both files are executable (chmod a+x filename)
Try running apktool via cli
这样你就配置了bash权限,可以执行apktool命令,回车可以查看其命令集
|
|
这样就能生成一个file的文件夹,就生成了资源文件,smile文件,如果修改了生成apk文件
|
|
上面的build和dist就是回编译apk过程中生成的东西,编译出来的apk在dist目录下,打开build/apk文件夹会发现少了original文件夹下的META-INF文件夹,也就意味着dist里的apk文件是没有签名的。
dex2jar,我们把.apk重命名成.zip,解压,取出classess.dex。我们要用dex2jar将apk转成jar文件,实质是将apk里的classes.dex转成jar。然后进到dex2jar这个文件夹下运行:
|
|
可能会出现
|
|
这时候就将dex2jar里的d2j_invoke.sh/d2j-dex2jar.sh增加可执行权限
|
|
这样就生成了classes-dex2jar.jar,
打开JD-GUI,将hongbao-dex2jar.jar拖进去就看到源码了。 通过看Java源码对比smali文件,修改后回编译就ok了!
如何手动给apk增加签名?
回编译后的apk是安装不成功的,总是提示
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 实质是没签名。
1,生成签名:
|
|
注意:上面-keystore后面跟的是签名文件的名字,而-alias是别名,一般情况下-keystore后面跟-alias是一样的,但其实两者没有关系,这也是我故意搞成不一样的原因。
2,为apk增加签名:
|
|
注意:
1,最后的”aliasname”就是-alias后面带的,必须保持一致。
2,如果不带-digestalg SHA1 -sigalg MD5withRSA签名后的apk安装也是不成功的,说INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误,如果不带-tsa会报一个时间方面的警告。